home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue44 / singletn / singleform.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1999-01-26  |  1.7 KB  |  91 lines

  1. unit singleform;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   StdCtrls;
  8.  
  9. type
  10.   TSingle = class (TObject)
  11.   public
  12.     class function NewInstance: TObject; override;
  13.     procedure FreeInstance; override;
  14.   end;
  15.  
  16.   TForm1 = class(TForm)
  17.     Button1: TButton;
  18.     Button2: TButton;
  19.     Memo1: TMemo;
  20.     procedure Button1Click(Sender: TObject);
  21.     procedure FormCreate(Sender: TObject);
  22.     procedure Button2Click(Sender: TObject);
  23.     procedure FormDestroy(Sender: TObject);
  24.   private
  25.     s1: TSingle;
  26.   public
  27.     { Public declarations }
  28.   end;
  29.  
  30. var
  31.   Form1: TForm1;
  32.  
  33. implementation
  34.  
  35. {$R *.DFM}
  36.  
  37. { TSingle }
  38.  
  39. var
  40.   Instance: TObject = nil;
  41.   nCount: Integer = 0;
  42.  
  43. procedure TSingle.FreeInstance;
  44. begin
  45.   Dec (nCount);
  46.   if nCount = 0 then
  47.   begin
  48.     inherited FreeInstance;
  49.     Instance := nil;
  50.   end;
  51. end;
  52.  
  53. class function TSingle.NewInstance: TObject;
  54. begin
  55.   if not Assigned (Instance) then
  56.     Instance := inherited NewInstance;
  57.   Result := Instance;
  58.   Inc (nCount);
  59. end;
  60.  
  61. procedure TForm1.Button1Click(Sender: TObject);
  62. var
  63.   s2: TSingle;
  64. begin
  65.   s2 := TSingle.Create;
  66.   Memo1.Lines.Add ('s2: ' + IntToStr (Integer (Pointer (s2))));
  67.   s2.Free;
  68. end;
  69.  
  70. procedure TForm1.FormCreate(Sender: TObject);
  71. begin
  72.   S1 := TSingle.Create;
  73.   Memo1.Lines.Add ('s1: ' + IntToStr (Integer (Pointer (s1))));
  74. end;
  75.  
  76. procedure TForm1.Button2Click(Sender: TObject);
  77. var
  78.   s3: TSingle;
  79. begin
  80.   s3 := TSingle.Create;
  81.   Memo1.Lines.Add ('s3: ' + IntToStr (Integer (Pointer (s3))));
  82.   s3.Free;
  83. end;
  84.  
  85. procedure TForm1.FormDestroy(Sender: TObject);
  86. begin
  87.   s1.Free;
  88. end;
  89.  
  90. end.
  91.